//#ifndef static_array_HPP__
//#define static_array_HPP__
//
//namespace static_array
//{
//
//struct null_terminator {};
//
//template<int V, typename T = null_terminator>
//struct e
//{
//	static const int value = V;
//	typedef T next;
//};
//
//
//
//
//template<typename Array, int Index>
//struct at
//{
//	static const int value = at<typename Array::next, Index - 1>::value;
//};
//
//template<typename Array>
//struct at<Array, 0>
//{
//	static const int value = Array::value;
//};
//
//
//template<typename Array>
//int at_index( int index )
//{
//	return at<Array, index>::value;
//}
//
//
//
//template<typename Array>
//struct size
//{
//	static const int value = size<typename Array::next>::value + 1;
//};
//
//template<>
//struct size<null_terminator>
//{
//	static const int value = 0;
//};
//
//
//
//
//
//
//template <typename Array, template <int> class MF1>
//struct transform
//{
//	typedef e< MF1<Array::value>::value, typename transform<typename Array::next, MF1>::type > type;
//};
//
//template <template <int> class MF1>
//struct transform<null_terminator, MF1>
//{
//	typedef null_terminator type;
//};
//
//
//} //namespace static_array
//
//
//#endif // static_array_HPP__